package com.transfer.service;

import java.util.ArrayList;
import java.util.List;

import javax.transaction.Transactional;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageImpl;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.domain.Specification;
import org.springframework.stereotype.Service;

import com.common.util.AJAXResultMessage;
import com.staff.entity.Staff;
import com.staff.service.StaffService;
import com.transfer.dao.QuitStaffRepository;
import com.transfer.entity.QuitStaff;
import com.transfer.entity.dto.QuitStaffQueryDTO;

@Service
@Transactional
public class QuitStaffService implements IQuitStaffService {
	@Autowired
	private QuitStaffRepository quitStaffRepository;
	@Autowired
	private StaffService staffService;
	@Autowired
	private IQuitStaffService quitStaffService;
	
	@Override
	public AJAXResultMessage saveOrUpdate(QuitStaff quitStaff) {
		Staff staff = staffService.findOne(quitStaff.getStaffNum());
		if(staff.getId()!=null) {
			if(null==staff.getStaffState()||!staff.getStaffState().equals("离职")) //判断员工状态是否为离职
			{
				staff.setStaffState("离职");//更改员工状态为离职
				quitStaff.setStaff(staff);
			
				quitStaffRepository.save(quitStaff);
				return new AJAXResultMessage(true,"操作成功");
			}
			else
			{
				return new AJAXResultMessage(false,"该员工已离职");
			}
		}
		else {
			return new AJAXResultMessage(false,"无该员工信息");
		}
		
	}
	@Override
	public AJAXResultMessage saveOrUpdate(QuitStaffQueryDTO quitStaffQueryDTO) {
		QuitStaff er = new QuitStaff();
		if(staffService.findOne(quitStaffQueryDTO.getStaffNum())!= null) //判断员工是否存在数据库
		{
			if(quitStaffQueryDTO.getId()== null)
			{//新建离职
				Staff staff = staffService.findOne(quitStaffQueryDTO.getStaffNum());
				
				er.setStaffNum(quitStaffQueryDTO.getStaffNum());
				er.setStaffName(staff.getStaffName());
				er.setQuitReason(quitStaffQueryDTO.getQuitReason());
				er.setQuitTime(quitStaffQueryDTO.getQuitTime());
				er.setQuitType(quitStaffQueryDTO.getQuitType());			
				er.setStaff(staff);
				
				return quitStaffService.saveOrUpdate(er);
			}
			else
			{ //修改离职
				er = quitStaffService.findOne(quitStaffQueryDTO.getId());
				
				er.setQuitReason(quitStaffQueryDTO.getQuitReason());
				er.setQuitTime(quitStaffQueryDTO.getQuitTime());
				er.setQuitType(quitStaffQueryDTO.getQuitType());	
				
				return quitStaffService.saveOrUpdate(er);				
			}
		}
		return new AJAXResultMessage(false,"该员工不存在");
	}
	@Override
	public void delete(QuitStaff quitStaff) {
		quitStaff=quitStaffRepository.findOne(quitStaff.getId());
		if(quitStaff!=null) {
			quitStaff.setStaff(null);
			quitStaffRepository.save(quitStaff);
		}
		quitStaffRepository.delete(quitStaff);
	}

	@Override
	public QuitStaff findOne(Long id) {
		return quitStaffRepository.findOne(id);
	}

	@Override
	public List<QuitStaff> findAll() {
		return (List<QuitStaff>) quitStaffRepository.findAll();
	}

	@Override
	public void delete(List<Long> ids) {
		List<QuitStaff> quitStaffList = (List<QuitStaff>)quitStaffRepository.findAll(ids);
		for(QuitStaff quitStaff : quitStaffList) {
			quitStaff.setStaff(null);
			quitStaffRepository.save(quitStaff);
		}
			quitStaffRepository.delete(quitStaffList);
		
	}

	@Override
	public Page<QuitStaffQueryDTO> findAll(Specification<QuitStaff> spec, Pageable pageable) {
		//将离职信息page转化为离职信息DTOpage
		List<QuitStaffQueryDTO> results = new ArrayList<QuitStaffQueryDTO>();
		Page<QuitStaff> page = quitStaffRepository.findAll(spec, pageable);
		for(QuitStaff sc:page.getContent()) {
			QuitStaffQueryDTO scDTO = new QuitStaffQueryDTO(sc, sc.getStaff());
        	results.add(scDTO);
		}
		return new PageImpl<QuitStaffQueryDTO>(results, pageable, results.size());
	}



}
